home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 34 / Amiga Format CD34 (1998-11-20)(Future Publishing)(GB)[!][Christmas issue].iso / -seriously_amiga- / programming / basic / blitzc2p / c2p / c2p030only.ascii next >
Text File  |  1998-10-01  |  7KB  |  477 lines

  1. WBStartup
  2. NoCli
  3.  
  4. ; 030/50 results:
  5.  
  6. ; 320x200 @40.4fps PAL
  7. ; 320x256 @30.7fps PAL
  8. ; 320x200 @44.1fps PAL
  9. ; 320x256 @33.8fps PAL
  10.  
  11. ; 040/25 results:
  12.  
  13. ; 320x200 @42fps DoublePAL or 44fps PAL
  14. ; 320x256 @31fps DoublePAL or 34fps PAL
  15. ; 320x240 @33.6fps DoublePAL or 36.5fps PAL
  16.  
  17. #c2pBPLX=320
  18. #c2pBPLY=256
  19. #c2pBPLSIZE=(#c2pBPLX*#c2pBPLY)/8
  20.  
  21. #scrwidth=#c2pBPLX
  22. #scrheight=#c2pBPLY
  23. #screensize=#scrwidth*#scrheight
  24.  
  25. ; c2p1x1_8_c5
  26. ;
  27. ; 132% on 040-25
  28.  
  29. Statement c2p030onlyinit{A.l,B.l}
  30.  
  31.   ;A.l=d0=Width.w
  32.   ;B.l=d1=Height.w
  33.  
  34. ; d0.w  chunkyx [chunky-pixels]
  35. ; d1.w  chunkyy [chunky-pixels]
  36. ; d2.w  (scroffsx) [screen-pixels]
  37. ; d3.w  scroffsy [screen-pixels]
  38. ; d4.w  (rowlen) [bytes] -- offset between one row and the next in a bpl
  39. ; d5.l  (c2pBPLSIZE) [bytes] -- offset between one row in one bpl and the next bpl
  40.  
  41.   MOVEQ.l #0,d2
  42.   MOVEQ.l #0,d3
  43.   MOVE.l  #c2pBPLX/8,d4
  44.   MOVE.l  d4,d5
  45.   MULU    d1,d5
  46.  
  47.   LEA c2p_data(pc),a0
  48.   ANDI.l  #$ffff,d0
  49.   MULU.w  d0,d3
  50.   LSR.l #3,d3
  51.   MOVE.l  d3,c2p_scroffs-c2p_data(a0)
  52.   MULU.w  d0,d1
  53.   MOVE.l  d1,c2p_pixels-c2p_data(a0)
  54. AsmExit
  55. End Statement
  56.  
  57. Statement c2p030only{A.l,B.l}
  58.  
  59.   MOVE.l  d0,a0 ; Chunky
  60.   MOVE.l  d1,a1 ; Planar
  61.  
  62. ; a0  c2pscreen
  63. ; a1  bitplanes
  64.  
  65. c2p1x1_8_c5
  66.   MOVEM.l a2-a6,-(a7)
  67.  
  68.   LEA c2p_data(pc),a2
  69.  
  70.   MOVE.l  #$33333333,d5
  71.   MOVE.l  #$55555555,d6
  72.   MOVE.l  #$00ff00ff,a6
  73.  
  74.   ADD.w #c2pBPLSIZE,a1
  75.   ADD.l c2p_scroffs-c2p_data(a2),a1
  76.  
  77.   MOVE.l  c2p_pixels-c2p_data(a2),a2
  78.   ADD.l a0,a2
  79.   CMP.l a0,a2
  80.   BEQ _none
  81.  
  82.   MOVEM.l a0-a1,-(a7)
  83.  
  84.   MOVE.l  (a0)+,d0
  85.   MOVE.l  (a0)+,d2
  86.   MOVE.l  (a0)+,d1
  87.   MOVE.l  (a0)+,d3
  88.  
  89.   MOVE.l  #$0f0f0f0f,d4   ; Merge 4x1, part 1
  90.   AND.l d4,d0
  91.   AND.l d4,d2
  92.   LSL.l #4,d0
  93.   OR.l  d2,d0
  94.  
  95.   AND.l d4,d1
  96.   AND.l d4,d3
  97.   LSL.l #4,d1
  98.   OR.l  d3,d1
  99.  
  100.   MOVE.l  d1,a3
  101.  
  102.   MOVE.l  (a0)+,d2
  103.   MOVE.l  (a0)+,d1
  104.   MOVE.l  (a0)+,d3
  105.   MOVE.l  (a0)+,d7
  106.  
  107.   AND.l d4,d2     ; Merge 4x1, part 2
  108.   AND.l d4,d1
  109.   LSL.l #4,d2
  110.   OR.l  d1,d2
  111.  
  112.   AND.l d4,d3
  113.   AND.l d4,d7
  114.   LSL.l #4,d3
  115.   OR.l  d7,d3
  116.  
  117.   MOVE.l  a3,d1
  118.  
  119.   MOVE.w  d2,d7     ; Swap 16x2
  120.   MOVE.w  d0,d2
  121.   SWAP  d2
  122.   MOVE.w  d2,d0
  123.   MOVE.w  d7,d2
  124.  
  125.   MOVE.w  d3,d7
  126.   MOVE.w  d1,d3
  127.   SWAP  d3
  128.   MOVE.w  d3,d1
  129.   MOVE.w  d7,d3
  130.  
  131.   BRA _start1
  132. _x1
  133.   MOVE.l  (a0)+,d0
  134.   MOVE.l  (a0)+,d2
  135.   MOVE.l  (a0)+,d1
  136.   MOVE.l  (a0)+,d3
  137.  
  138.   MOVE.l  d7,c2pBPLSIZE(a1)
  139.  
  140.   MOVE.l  #$0f0f0f0f,d4   ; Merge 4x1, part 1
  141.   AND.l d4,d0
  142.   AND.l d4,d2
  143.   LSL.l #4,d0
  144.   OR.l  d2,d0
  145.  
  146.   AND.l d4,d1
  147.   AND.l d4,d3
  148.   LSL.l #4,d1
  149.   OR.l  d3,d1
  150.  
  151.   MOVE.l  d1,a3
  152.  
  153.   MOVE.l  (a0)+,d2
  154.   MOVE.l  (a0)+,d1
  155.   MOVE.l  (a0)+,d3
  156.   MOVE.l  (a0)+,d7
  157.  
  158.   MOVE.l  a4,(a1)+
  159.  
  160.   AND.l d4,d2     ; Merge 4x1, part 2
  161.   AND.l d4,d1
  162.   LSL.l #4,d2
  163.   OR.l  d1,d2
  164.  
  165.   AND.l d4,d3
  166.   AND.l d4,d7
  167.   LSL.l #4,d3
  168.   OR.l  d7,d3
  169.  
  170.   MOVE.l  a3,d1
  171.  
  172.   MOVE.w  d2,d7     ; Swap 16x2
  173.   MOVE.w  d0,d2
  174.   SWAP  d2
  175.   MOVE.w  d2,d0
  176.   MOVE.w  d7,d2
  177.  
  178.   MOVE.w  d3,d7
  179.   MOVE.w  d1,d3
  180.   SWAP  d3
  181.   MOVE.w  d3,d1
  182.   MOVE.w  d7,d3
  183.  
  184.   MOVE.l  a5,-c2pBPLSIZE-4(a1)
  185. _start1
  186.   MOVE.l  a6,d4
  187.  
  188.   MOVE.l  d2,d7     ; Swap 2x2
  189.   LSR.l #2,d7
  190.   EOR.l d0,d7
  191.   AND.l d5,d7
  192.   EOR.l d7,d0
  193.   LSL.l #2,d7
  194.   EOR.l d7,d2
  195.  
  196.   MOVE.l  d3,d7
  197.   LSR.l #2,d7
  198.   EOR.l d1,d7
  199.   AND.l d5,d7
  200.   EOR.l d7,d1
  201.   LSL.l #2,d7
  202.   EOR.l d7,d3
  203.  
  204.   MOVE.l  d1,d7
  205.   LSR.l #8,d7
  206.   EOR.l d0,d7
  207.   AND.l d4,d7
  208.   EOR.l d7,d0
  209.   LSL.l #8,d7
  210.   EOR.l d7,d1
  211.  
  212.   MOVE.l  d1,d7
  213.   LSR.l #1,d7
  214.   EOR.l d0,d7
  215.   AND.l d6,d7
  216.   EOR.l d7,d0
  217.   MOVE.l  d0,c2pBPLSIZE*2(a1)
  218.   ADD.l d7,d7
  219.   EOR.l d1,d7
  220.  
  221.   MOVE.l  d3,d1
  222.   LSR.l #8,d1
  223.   EOR.l d2,d1
  224.   AND.l d4,d1
  225.   EOR.l d1,d2
  226.   LSL.l #8,d1
  227.   EOR.l d1,d3
  228.  
  229.   MOVE.l  d3,d1
  230.   LSR.l #1,d1
  231.   EOR.l d2,d1
  232.   AND.l d6,d1
  233.   EOR.l d1,d2
  234.   ADD.l d1,d1
  235.   EOR.l d1,d3
  236.  
  237.   MOVE.l  d2,a4
  238.   MOVE.l  d3,a5
  239.  
  240.   CMPA.l  a0,a2
  241.   BNE _x1
  242.  
  243.   MOVE.l  d7,c2pBPLSIZE(a1)
  244.   MOVE.l  a4,(a1)+
  245.   MOVE.l  a5,-c2pBPLSIZE-4(a1)
  246.  
  247.   MOVEM.l (a7)+,a0-a1
  248.   ADD.l #c2pBPLSIZE*4,a1
  249.  
  250.   MOVE.l  (a0)+,d0
  251.   MOVE.l  (a0)+,d2
  252.   MOVE.l  (a0)+,d1
  253.   MOVE.l  (a0)+,d3
  254.  
  255.   MOVE.l  #$f0f0f0f0,d4   ; Merge 4x1, part 1
  256.   AND.l d4,d0
  257.   AND.l d4,d2
  258.   LSR.l #4,d2
  259.   OR.l  d2,d0
  260.  
  261.   AND.l d4,d1
  262.   AND.l d4,d3
  263.   LSR.l #4,d3
  264.   OR.l  d3,d1
  265.  
  266.   MOVE.l  d1,a3
  267.  
  268.   MOVE.l  (a0)+,d2
  269.   MOVE.l  (a0)+,d1
  270.   MOVE.l  (a0)+,d3
  271.   MOVE.l  (a0)+,d7
  272.  
  273.   AND.l d4,d2     ; Merge 4x1, part 2
  274.   AND.l d4,d1
  275.   LSR.l #4,d1
  276.   OR.l  d1,d2
  277.  
  278.   AND.l d4,d3
  279.   AND.l d4,d7
  280.   LSR.l #4,d7
  281.   OR.l  d7,d3
  282.  
  283.   MOVE.l  a3,d1
  284.  
  285.   MOVE.w  d2,d7     ; Swap 16x2
  286.   MOVE.w  d0,d2
  287.   SWAP  d2
  288.   MOVE.w  d2,d0
  289.   MOVE.w  d7,d2
  290.  
  291.   MOVE.w  d3,d7
  292.   MOVE.w  d1,d3
  293.   SWAP  d3
  294.   MOVE.w  d3,d1
  295.   MOVE.w  d7,d3
  296.  
  297.   BRA _start2
  298. _x2
  299.   MOVE.l  (a0)+,d0
  300.   MOVE.l  (a0)+,d2
  301.   MOVE.l  (a0)+,d1
  302.   MOVE.l  (a0)+,d3
  303.  
  304.   MOVE.l  d7,c2pBPLSIZE(a1)
  305.  
  306.   MOVE.l  #$f0f0f0f0,d4   ; Merge 4x1, part 1
  307.   AND.l d4,d0
  308.   AND.l d4,d2
  309.   LSR.l #4,d2
  310.   OR.l  d2,d0
  311.  
  312.   AND.l d4,d1
  313.   AND.l d4,d3
  314.   LSR.l #4,d3
  315.   OR.l  d3,d1
  316.  
  317.   MOVE.l  d1,a3
  318.  
  319.   MOVE.l  (a0)+,d2
  320.   MOVE.l  (a0)+,d1
  321.   MOVE.l  (a0)+,d3
  322.   MOVE.l  (a0)+,d7
  323.  
  324.   MOVE.l  a4,(a1)+
  325.  
  326.   AND.l d4,d2     ; Merge 4x1, part 2
  327.   AND.l d4,d1
  328.   LSR.l #4,d1
  329.   OR.l  d1,d2
  330.  
  331.   AND.l d4,d3
  332.   AND.l d4,d7
  333.   LSR.l #4,d7
  334.   OR.l  d7,d3
  335.  
  336.   MOVE.l  a3,d1
  337.  
  338.   MOVE.w  d2,d7     ; Swap 16x2
  339.   MOVE.w  d0,d2
  340.   SWAP  d2
  341.   MOVE.w  d2,d0
  342.   MOVE.w  d7,d2
  343.  
  344.   MOVE.w  d3,d7
  345.   MOVE.w  d1,d3
  346.   SWAP  d3
  347.   MOVE.w  d3,d1
  348.   MOVE.w  d7,d3
  349.  
  350.   MOVE.l  a5,-c2pBPLSIZE-4(a1)
  351. _start2
  352.   MOVE.l  a6,d4
  353.  
  354.   MOVE.l  d2,d7     ; Swap 2x2
  355.   LSR.l #2,d7
  356.   EOR.l d0,d7
  357.   AND.l d5,d7
  358.   EOR.l d7,d0
  359.   LSL.l #2,d7
  360.   EOR.l d7,d2
  361.  
  362.   MOVE.l  d3,d7
  363.   LSR.l #2,d7
  364.   EOR.l d1,d7
  365.   AND.l d5,d7
  366.   EOR.l d7,d1
  367.   LSL.l #2,d7
  368.   EOR.l d7,d3
  369.  
  370.   MOVE.l  d1,d7
  371.   LSR.l #8,d7
  372.   EOR.l d0,d7
  373.   AND.l d4,d7
  374.   EOR.l d7,d0
  375.   LSL.l #8,d7
  376.   EOR.l d7,d1
  377.  
  378.   MOVE.l  d1,d7
  379.   LSR.l #1,d7
  380.   EOR.l d0,d7
  381.   AND.l d6,d7
  382.   EOR.l d7,d0
  383.   MOVE.l  d0,c2pBPLSIZE*2(a1)
  384.   ADD.l d7,d7
  385.   EOR.l d1,d7
  386.  
  387.   MOVE.l  d3,d1
  388.   LSR.l #8,d1
  389.   EOR.l d2,d1
  390.   AND.l d4,d1
  391.   EOR.l d1,d2
  392.   LSL.l #8,d1
  393.   EOR.l d1,d3
  394.  
  395.   MOVE.l  d3,d1
  396.   LSR.l #1,d1
  397.   EOR.l d2,d1
  398.   AND.l d6,d1
  399.   EOR.l d1,d2
  400.   ADD.l d1,d1
  401.   EOR.l d1,d3
  402.  
  403.   MOVE.l  d2,a4
  404.   MOVE.l  d3,a5
  405.  
  406.   CMPA.l  a0,a2
  407.   BNE _x2
  408.  
  409.   MOVE.l  d7,c2pBPLSIZE(a1)
  410.   MOVE.l  a4,(a1)+
  411.   MOVE.l  a5,-c2pBPLSIZE-4(a1)
  412.  
  413. _none
  414.   MOVEM.l (a7)+,a2-a6
  415. AsmExit
  416.  
  417.   Even4
  418. c2p_data
  419. c2p_scroffs: Dc.l 0
  420. c2p_pixels: Dc.l 0
  421.   Ds.l  16
  422. End Statement
  423.  
  424.  
  425.  
  426.  
  427. .blitzprogram
  428. ; Setup
  429. InitBank 0,(#scrwidth*#scrheight)+1000,2|65536 ; Chipram planar buffer
  430. CludgeBitMap 0,#scrwidth,#scrheight,8,Bank(0)
  431. InitPalette 0,256
  432. For c=0 To 255
  433.   AGAPalRGB 0,c,Rnd(c),Rnd(c),Rnd(c)
  434. Next c
  435. AGAPalRGB 0,0,0,0,0
  436. Screen 0,0,0,#scrwidth,#scrheight,8,0,"c2p test",0,0,0
  437. Use Palette 0
  438. VWait 50
  439. baseaddress1.l=AllocMem(#scrwidth*#scrheight,$10000) ; Fastram chunky buffer
  440.  
  441. ; Put something into the chunky buffer so we can see it working
  442. GetReg a0,baseaddress1
  443. MOVE.l  #0,d0
  444. MOVE.l  #screensize-1,d1
  445. cloop
  446.   MOVE.b  d0,(a0)+
  447.   ADDQ.l  #1,d0
  448.   SUBQ.l  #1,d1
  449.   TST.l   d1
  450.   BLT     done
  451.   BRA     cloop
  452. done
  453.  
  454. ; Do the c2p test
  455. c2p030onlyinit{#scrwidth,#scrheight}
  456. VWait 20
  457. Forbid_
  458. VWait
  459. ResetTimer
  460. For time=1 To 800
  461.   c2p030only{baseaddress1,Bank(0)} ; Convert chunky to planar
  462. Next time
  463. t=Ticks
  464. VWait 2 : Permit_
  465. VWait 20
  466. FindScreen 0
  467. Window 0,0,11,640,100,0,"Test results for c2p",0,0
  468. WindowOutput 0
  469. NPrint "Routine performed @ ",50/(t/800),"fps - ",t," ticks"
  470. NPrint " "
  471. NPrint "Press mousebutton..."
  472. Free Screen 0
  473. MouseWait
  474. Free Window 0
  475. End
  476.  
  477.